home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 3
/
Gold Medal Software - Volume 3 (Gold Medal) (1994).iso
/
prog
/
word.arj
/
MISSILE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-28
|
5KB
|
289 lines
// missile command type game
// REQUIRES MOUSE!
#include <alloc.h>
#include <mem.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <time.h>
#include <wgt.h>
#define true 1;
#define down 1
#define left 2
#define right 3
#define vertical 0
#define horizontal 1
color palette[255];
int tone;
void so(void);
void init(void);
void changepalette256(void);
unsigned cursor[32] = {
0xfe3f,0xfe3f,0xfe3f,0xfe3f,0xfe3f,0xfe3f,0x81c0,0x81c0,
0x81c0,0xfe3f,0xfe3f,0xfe3f,0xfe3f,0xfe3f,0xfe3f,0xffff,
0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x3c1e,
0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0};
block chunk,build,base,noth;
block mouses;
int oldx,oldy;
int i,a,sc,j;
int ex[31],exx[31],exy[31];
int sx[501],sy[501],dx[501];
int maxs=30,level=5,chk,hits,shoot;
int baseh[3];
int buildh[20];
char ans;
void main(void)
{
do {
init();
msetspeed(6,6);
msetthreshhold(40);
wnormscreen();
do {
so();
shoot=0;
sc=0;
wsetscreen(chunk);
for (i=0; i<50; i++) // clears top of screen
{
wsetcolor(i);
wbar(0,sc,319,sc+3);
sc+=3;
}
mread();
moff();
if ((but==1) & (baseh[0]==1))
{
wline(20,149,mx,my);
shoot=1;
}
else if ((but==2) & (baseh[1]==1))
{
wline(305,149,mx,my);
shoot=1;
}
i=0;
do {
if (ex[i]==0) {
if (shoot ==1) {
ex[i]=14;
exx[i]=mx;
exy[i]=my;
// shoot snd
tone=600;
so();
i=7;}
}
else {
ex[i]--;
wsetcolor(128+ex[i]*4);
wfill_circle(exx[i],exy[i],ex[i]);
tone=ex[i]*20;
so();
}
i++;
} while (i<maxs);
i=0;
do {
if ((sy[i]<1) & (rand() % 30==5))
{
sy[i]=1;
sx[i]=rand() % 300;
dx[i]=(rand() % 6)-3;
}
else if (sy[i]>0)
{
sy[i]+=2;
sx[i]+=dx[i];
if (sx[i]>317)
sx[i]=0;
if (sx[i]<0)
sx[i]=317;
wsetcolor(90);
chk=wgetpixel(sx[i],sy[i]);
wbar(sx[i],sy[i],sx[i]+1,sy[i]+1);
if ((sy[i]>149) | (chk>127))
{
if (sy[i]>149)
{
if ((sx[i]>10) & (sx[i]<30) & (baseh[0]==1))
{ // hit base 1
wnormscreen();
wputblock(10,150,noth,0);
wputblock(20,150,noth,0);
wsetscreen(chunk);
baseh[0]=0;
// hit snd
tone=800;
so();
}
if ((sx[i]>300) & (sx[i]<320) & (baseh[1]==1))
{ // hit base 2
wnormscreen();
wputblock(295,150,noth,0);
wputblock(305,150,noth,0);
wsetscreen(chunk);
baseh[1]=0;
// hit snd
tone=800;
so();
}
for (j=1; j<15; j++)
{ // check building hits
chk=j*17+40;
if ((sx[i]>chk) & (sx[i]<chk+10) & (buildh[j-1]==1))
{
wnormscreen();
wputblock(j*17+40,150,noth,0);
wsetscreen(chunk);
buildh[j-1]=0;
hits++;
// hit snd
tone=800;
so();
}
}
}
sy[i]=-10;
// explo snd
tone=300;
so();
}
}
i++;
} while (i<level);
wcopyscreen(0,0,319,149,chunk,0,0,NULL);
mon();
} while (!kbhit());
nosound();
getch();
wnormscreen();
wfreeblock(chunk);
wfreeblock(build);
wfreeblock(base);
wfreeblock(noth);
moff();
textmode(C80);
window(1,1,80,24);
gotoxy(1,1);
printf("Play again? (Y/N) ");
scanf("%s",&ans);
} while ((ans !='n') & (ans !='N'));
}
void changepalette256(void)
{
wsetrgb(0,0,0,0,&palette);
for (i=1; i<64; i++)
wsetrgb(i,0,63-i,63-i/2,&palette);
for (i=64; i<128; i++)
wsetrgb(i,127-i,127-i,127-i,&palette);
for (i=128; i<192; i++)
wsetrgb(i,i-127,(i-127)/2,0,&palette);
for (i=192; i<256; i++)
wsetrgb(i,63,63,i-192,&palette);
wsetpalette(0,255,palette);
}
void init()
{
vga256();
minit();
mon();
mouseshape(8,7,cursor);
randomize();
changepalette256();
wcls(0);
window(1,1,80,24);
gotoxy(1,1);
printf("Start at what level? ");
scanf("%d",&level);
for (i=1; i<11; i++)
{
wsetcolor(i+74);
wline(i,0,i,9);
}
wsetcolor(0);
wbar(3,1,4,2);
wbar(6,1,7,2);
wbar(3,4,4,5);
wbar(6,4,7,5);
wbar(8,6,9,9);
build=wnewblock(1,0,10,9);
wcls(0);
for (i=150; i<160; i++)
{
wsetcolor(i/3);
wline(0,i-150,319,i-150);
}
noth=wnewblock(0,0,9,9);
for (i=10; i>0; i--)
{
wsetcolor(80+i);
wfill_circle(10,10,i);
}
base=wnewblock(0,0,20,10);
wcls(0);
for (i=150; i<160; i++)
{
wsetcolor(i/3);
wline(0,i,319,i);
}
wputblock(10,150,base,0);
wputblock(295,150,base,0);
baseh[0]=1;
baseh[1]=1;
wsetcolor(74);
for (i=1; i<15; i++)
{
wputblock(i*17+40,150,build,0);
buildh[i-1]=1;
}
for (i=160; i<200; i++)
{
wsetcolor(i-86);
wline(0,i,319,i);
}
chunk=wnewblock(0,0,319,199);
wsetscreen(chunk);
sc=0;
for (i=1; i<50; i++)
{
wsetcolor(sc);
wbar(0,sc,319,sc+3);
sc+=3;
}
}
void so()
{
if (tone>100)
{
sound(tone);
tone-=100;
}
if (tone<105)
nosound();
}